/*-*
 * FILENAME  :
 *    $HeadURL$
 *
 * STATUS  :
 *    $Revision$
 *
 *    $Author$
 *    $Date$
 *  
 *    
 * Copyright (c) 2011 Gonalge Ltda. All rights reserved.
 *
 ****************************************************************/

package org.gonalge.rompecabeza.remoto.imp;

import javax.swing.event.EventListenerList;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.EventListener;
import java.util.Vector;

import org.gonalge.rompecabeza.dto.Jugador;
import org.gonalge.rompecabeza.dto.Mensaje;
import org.gonalge.rompecabeza.negocio.Juego;
import org.gonalge.rompecabeza.negocio.ListaPieza;
import org.gonalge.rompecabeza.remoto.ClienteRemoto;
import org.gonalge.rompecabeza.remoto.NotificadorRemoto;

/**
 * 
 * @author Geremias Gonzalez
 */
public class Notificador extends UnicastRemoteObject implements NotificadorRemoto {

    /**
     * 
     */
    private static final long serialVersionUID = 5669164588558285788L;

    private transient EventListenerList listaEventos = new EventListenerList();

    public Notificador() throws RemoteException {
    }

    public void adicionarEscuchador(ClienteRemoto listener) {
        listaEventos.add(ClienteRemoto.class, listener);
    }

    @Override
    public void actualizarListaUsuarios(Vector<String> usuarios) {
        EventListener array[] = listaEventos.getListeners(ClienteRemoto.class);
        for (EventListener eventListener : array) {
            ((ClienteRemoto) eventListener).actualizarListaUsuarios(usuarios);
        }
    }

    @Override
    public void conexionExitosa() {
        EventListener array[] = listaEventos.getListeners(ClienteRemoto.class);
        for (EventListener eventListener : array) {
            ((ClienteRemoto) eventListener).conexionExitosa();
        }
    }

    @Override
    public void terminarServicio() {
        EventListener array[] = listaEventos.getListeners(ClienteRemoto.class);
        for (EventListener eventListener : array) {
            ((ClienteRemoto) eventListener).servicioTerminado();
        }
    }

    @Override
    public void enviarMensaje(Mensaje msm) {
        EventListener array[] = listaEventos.getListeners(ClienteRemoto.class);
        for (EventListener eventListener : array) {
            ((ClienteRemoto) eventListener).recibirMensaje(msm);
        }
    }

    @Override
    public void enviarJuego(boolean sw, Juego event) {
        EventListener array[] = listaEventos.getListeners(ClienteRemoto.class);
        for (EventListener eventListener : array) {
            ((ClienteRemoto) eventListener).recibirJuego(sw, event);
        }
    }

    @Override
    public void actualizarTablero(ListaPieza pDes, Vector<Jugador> jug, Vector<Byte> esTab) {
        EventListener array[] = listaEventos.getListeners(ClienteRemoto.class);
        for (EventListener eventListener : array) {
            ((ClienteRemoto) eventListener).actualizarTablero(pDes, jug, esTab);
        }
    }

    @Override
    public void actualizarPiezas(ListaPieza pDes, Vector<Jugador> jug) {
        EventListener array[] = listaEventos.getListeners(ClienteRemoto.class);
        for (EventListener eventListener : array) {
            ((ClienteRemoto) eventListener).actualizarPiezas(pDes, jug);
        }
    }
}
